package main

import (
	"ddl_checker/internal/config"
	"ddl_checker/internal/rules"
	"fmt"
)

func main() {
	fmt.Println("=== 环境变量配置测试 ===")

	// 显示当前环境变量配置
	envValidators := config.GetString("ENABLED_VALIDATORS", "")
	fmt.Printf("当前 ENABLED_VALIDATORS 配置: %s\n", envValidators)

	// 创建测试DDL脚本
	ddlScript := `CREATE TABLE test_schema.orders (
		id INT PRIMARY KEY,
		customer_id INT NOT NULL,
		order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
		total_amount DECIMAL(10,2),
		status VARCHAR(20) DEFAULT 'pending'
	);`

	data := rules.DDLCheckData{
		Schema: "test_schema",
		Table:  "orders",
		Script: ddlScript,
	}

	fmt.Printf("\nDDL脚本:\n%s\n", ddlScript)
	fmt.Println("=========================================")

	// 使用ExternalAPIRule进行测试
	externalRule := rules.NewExternalAPIRule()
	result := externalRule.Check(data)

	fmt.Printf("\nExternalAPIRule 检查结果:\n")
	fmt.Printf("检查状态: %s\n", result.Status)
	fmt.Printf("详细信息数量: %d\n", len(result.Details))

	// 显示详细信息
	for _, detail := range result.Details {
		if len(detail) > 0 {
			fmt.Printf("%s\n", detail)
		}
	}

	fmt.Println("\n=========================================")

	// 测试不同的环境变量配置
	fmt.Println("\n=== 测试不同环境变量配置 ===")

	// 临时设置环境变量
	testConfigs := []string{
		"",
		"语法检查器",
		"语法检查器,安全检查器",
		"语法检查器,安全检查器,性能检查器,外部HTTP检查器",
		"安全检查器,性能检查器",
	}

	for i, config := range testConfigs {
		fmt.Printf("\n测试配置 %d: %s\n", i+1, config)

		if config == "" {
			os.Unsetenv("ENABLED_VALIDATORS")
		} else {
			os.Setenv("ENABLED_VALIDATORS", config)
		}

		// 创建新的规则实例来测试新配置
		testRule := rules.NewExternalAPIRule()
		testResult := testRule.Check(data)

		// 通过检查结果中的详细信息数量来推断启用的检查器数量
		detailCount := len(testResult.Details)
		fmt.Printf("  检查状态: %s\n", testResult.Status)
		fmt.Printf("  详细信息条数: %d\n", detailCount)
	}

	// 恢复原始环境变量
	if envValidators == "" {
		os.Unsetenv("ENABLED_VALIDATORS")
	} else {
		os.Setenv("ENABLED_VALIDATORS", envValidators)
	}

	fmt.Println("\n=========================================")
	fmt.Println("测试完成！")
}
